Balkendiagramme in LATEX-Dokumenten




JOACHIM BLESEREDMUND LANG



TH Darmstadt, Hochschulrechenzentrum



Als Hilfsmittel, um Daten zu veranschaulichen, werden heutzutage immer häufiger Diagramme, insbesondere Balken- oder Kuchendiagramme, eingesetzt. Jeder kennt die Balkendiagramme, die z.B. nach Wahlen Gewinne und Verluste der einzelnen Parteien auf einen Blick verdeutlichen.

Das hier vorgestellte Style-File bar.sty hilft dem LATEX-Anwender, solche Balkendiagramme in seinen Dokumenten zu verwenden, ohne auf externe Programme, wie z.B. HAVARD GRAPHICS oder EXCEL im PC-Bereich, zurückgreifen zu müssen.

$\textstyle \parbox{6cm}{\tt $\backslash$begin\{barenv\}\\ \hspace*{5mm}{\em Dek...
...m Füllungsindex}\}[{\em Wert}]\\
$\backslash$end\{barenv\}\\
{\em Legende}}$

Innerhalb der neu definierten Umgebung barenv können beliebig positive und negative Balken gezeichnet werden. Acht verschiedene Schraffuren stehen zur Verfügung.

Schraffur: 1 2 3 4 5 6 7 8
Index: 1 2 3 4 5 6 7 8

Die Deklarationen definieren Einstellungen wie z.B. Balkenbreite oder die Einteilung der Achsen.

Der einfachste Fall ist ein zweidimensionales Balkendiagramm. Die Balken werden durch ihre Höhe und ihren Füllungsindex definiert. Optional ist noch eine beliebige Zeichenfolge möglich, die unter den Balken geschrieben wird.


$\textstyle \parbox{\mydim}{
\begin{barenv}
\setwidth{30}
\setyaxis{0}{50}{10}
\bar{10}{1}
\bar{45}{2}[\tt\small max]
\bar{30}{3}
\bar{25}{4}
\end{barenv}}$ $\textstyle \parbox{\mydim}{\tt
$\backslash$begin\{barenv\}\\
$\backslash$setya...
...bar\{30\}\{3\}\\
$\backslash$bar\{25\}\{4\}\\
$\backslash$end\{barenv\}\\
}$

Die x-Achse kann auch anstelle von Zahlen mit den Monatsnamen (d.h. mit den ersten drei Buchstaben der Monatsnamen) oder Tagen (d.h. mit den ersten drei Buchstaben der Tage) beschriftet werden.

Temperatur / Monat

\begin{barenv}
\setwidth{30}
\setstyle{\sc}
\setxvaluetyp{month}
\setxaxis{1...
...}{1}
\bar{8}{1}
\bar{15}{1}
\bar{25}{1}
\bar{20}{1}
\bar{5}{1}
\end{barenv}


Zwischen die Balken kann zusätzlicher Zwischenraum eingefügt oder auch eine Trennlinie gezogen werden. Ein Diagramm kann sehr leicht an der x-Achse gespiegelt werden, indem der Anfangs- und der Endwert der y-Achse vertauscht werden. In diesem Fall muß aber auch die Schrittweite negiert werden.



$\textstyle \parbox{\mydim}{
{\bf Gnu-Aktienindex}
\par
\vspace{\baselineskip}
...
...\bar{36.5}{8}
\bar{6.2}{8}
\vline
\bar{-3.2}{8}
\bar{-16}{8}
\end{barenv}}$$\textstyle \parbox{\mydim}{
{\bf Gnu-Aktienindex}
\par
\vspace{\baselineskip}
...
...\bar{36.5}{8}
\bar{6.2}{8}
\vline
\bar{-3.2}{8}
\bar{-16}{8}
\end{barenv}}$


Wenn der zweidimensionale Fall nicht ausreicht, können die Balken auch dreidimensional darstellen werden. Der Befehl \setdepth setzt die Balkentiefe auf einen Wert größer 0; dadurch erhalten die Balken Plastizität.

$\textstyle \parbox{\mydim}{
\begin{barenv}
\setdepth{10}\setwidth{30}
\setxa...
...}{20}
\bar{10,2}{1}
\bar{45,6}{2}
\bar{30}{3}
\bar{-12,7}{4}
\end{barenv}}$ $\textstyle \parbox{\mydim}{\tt$\backslash$begin\{barenv\}\\
$\backslash$setde...
...ar\{30\}\{3\}\\
$\backslash$bar\{-12,7\}\{4\}\\
$\backslash$end\{barenv\}
}$


Die Beschriftung der Balken kann an verschiedenen Stellen erfolgen. Voreingestellt ist oberhalb, wenn die Größe > 0 ist, und unterhalb, wenn die Größe < 0 ist. Fünf weitere Möglichkeiten sind zugelassen, so z.B. innerhalb der Balken oder stets unterhalb.

$\textstyle \parbox{\mydim}{
\vspace*{\baselineskip}
\begin{barenv}
\setdepth...
...}{20}
\bar{10,2}{1}
\bar{45,6}{1}
\bar{30}{1}
\bar{-12,7}{1}
\end{barenv}}$ $\textstyle \parbox{\mydim}{\tt$\backslash$begin\{barenv\}\\
$\backslash$setde...
...ar\{30\}\{1\}\\
$\backslash$bar\{-12,7\}\{1\}\\
$\backslash$end\{barenv\}
}$


Sind die Werte der Balken klein, treten Differenzen zwischen den Höhen nicht besonders deutlich hervor. In solchen Fällen kann das Diagramm vertikal mit dem Befehl \setstretch skaliert werden. Der umgekehrte Fall, wenn das Diagramm zu groß wird, kann ebenfalls mit \setstretch und einem Wert < 1 abgefangen werden. Die Skalierung betrifft nur die Balkenhöhen, nicht aber Breite und Tiefe.

$\textstyle \parbox{\mydim}{%
\begin{barenv}
\setstretch{50}
\setdepth{10}\se...
...}{0.5}
\bar{0,2}{1}
\bar{1,6}{2}
\bar{0,05}{3}
\bar{0,13}{4}
\end{barenv}}$ $\textstyle \parbox{\mydim}{\tt$\backslash$begin\{barenv\}\\
$\backslash$setst...
...r\{0,05\}\{3\}\\
$\backslash$bar\{0,13\}\{4\}\\
$\backslash$end\{barenv\}
}$

Der im obigen Beispiel verwendete Befehl \setprecision bestimmt die Anzahl der Nachkommastellen für die Beschriftungen der Achsen. Im Beispiel wurde, da der Befehl nach dem \setxaxis-Befehl erfolgt, für die y-Achse zwei Nachkommastellen gewählt.

Das Diagramm kann mit horizontalen Hintergrundlinien versehen werden. Dies erleichtert das Ablesen der Werte der einzelnen Balken. Es kann zwischen gepunkteten oder durchgezogenen Hintergrundlinien gewählt werden. Voreingestellt sind gepunktete Hintergrundlinien.

$\textstyle \parbox{\mydim}{
\begin{barenv}
\setstretch{0.05}
\setdepth{10}\s...
...ineon
\bar{1400}{4}
\bar{2340}{5}
\bar{890}{6}
\bar{1973}{7}
\end{barenv}}$ $\textstyle \parbox{\mydim}{\tt$\backslash$begin\{barenv\}\\
$\backslash$setst...
...ar\{890\}\{6\}\\
$\backslash$bar\{1973\}\{7\}\\
$\backslash$end\{barenv\}
}$


Zusätzliche Erklärungen können mit dem LATEX-eigenen \put Befehl hinzugefügt werden. Da das Balkendiagramm in eine picture-Umgebung gezeichnet wird, sind grundsätzlich alle Befehle erlaubt, die in einer picture-Umgebung Verwendung finden (z.B. \line, \oval usw.).